
package pruebas;

import excepciones.PersistenciaException;
import interfaces.IPersistencia;
import java.util.Iterator;
import java.util.List;
import objetosNegocio.ArticuloED;
import objetosNegocio.Cliente;
import objetosNegocio.Pelicula;
import objetosNegocio.Renta;
import objetosServicio.Fecha;
import objetosServicio.Periodo;
import persistencia.PersistenciaArchivos;

/**
 * Clase para realizar las pruebas al proyecto videoCentro_PersistenciaArchivos
 * @author Rafael Carrillo
 */
public class PruebaVideocentro {

    /**
     * Metodo Main
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        IPersistencia persistencia=new PersistenciaArchivos();
        //Crear objetos necesarios
        Pelicula pelicula1=new Pelicula("P00001", "Orgullo y Prejuicio", 
                "Drama", "A", "Colin Firth", "Anna Chancellor", "BBC");
        Pelicula pelicula2=new Pelicula("P00002", "El diablo viste de moda", 
                "Comedia", "B15", "Anne Hathaway", "Meryl Streep", "20 Century Fox");
        Pelicula pelicula3=new Pelicula("P00003", "El Ilusionista", 
                "Misterio", "A", "Rufus Sewell", "Edward Norton", "Quality Films");
        
//        Inciso b) Agregar 3 Peliculas
        try{
            persistencia.agregar(pelicula1);
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso b):" + pe.getMessage());
        }
        try{
            persistencia.agregar(pelicula2);
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso b):" + pe.getMessage());
        }
        try{
            persistencia.agregar(pelicula3);
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso b):" + pe.getMessage());
        }
        //Inciso c)Agregar la pelicula 1 de nuevo
        try{
            persistencia.agregar(pelicula1);
        }catch(PersistenciaException pe){
            System.out.println("Error inciso c):" + pe.getMessage());
        }
        //Inciso d) Listar el contenido del catalogo de peliculas
        try{
            List<Pelicula>peliculas=persistencia.consultarPeliculas();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                Pelicula pelicula=(Pelicula)i.next();
                System.out.println(pelicula.toString());
            }
        }catch(PersistenciaException pe){
            System.out.println("Error inciso d):" + pe.getMessage());
        }
        
        //Inciso e) Modificar el genero de la pelicula 3 y obtenerla
        try{
            pelicula3.setGenero("Drama");
            persistencia.actualizar(pelicula3);
            System.out.println("----------Inciso e)-------");
            System.out.println(persistencia.obten(pelicula3));
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso e):" + pe.getMessage());
        }
        
        //Inciso f) Eliminar la pelicula 2 (P00002)
        try{
            persistencia.eliminar(new Pelicula("P00002"));
           
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso f):" + pe.getMessage());
        }
        
        //Inciso g) Listar el contenido del catalogo
        try{
             System.out.println("-----Inciso g)-----");
            List<Pelicula>peliculas=persistencia.consultarPeliculas();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                Pelicula pelicula=(Pelicula)i.next();
                System.out.println(pelicula.toString());
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso g):" + pe.getMessage());
        }      
        
        //Inciso h) Mostrar Peliculas de Anna Hathaway
        try{
             System.out.println("-----Inciso h)-----");
            List<Pelicula>peliculas=persistencia.consultarPeliculasActor("Anna Hathaway");
            for (Iterator i=peliculas.iterator();i.hasNext();){
                Pelicula pelicula=(Pelicula)i.next();
                System.out.println(pelicula.toString());
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso h):" + pe.getMessage());
        }      
        //Inciso i) Mostrar las peliculas de la productora "Quality Films"
         try{
             System.out.println("-----Inciso i)-----");
            List<Pelicula>peliculas=persistencia.consultarPeliculasProductora("Quality Films");
            for (Iterator i=peliculas.iterator();i.hasNext();){
                Pelicula pelicula=(Pelicula)i.next();
                System.out.println(pelicula.toString());
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso i):" + pe.getMessage());
        }      

//                       Clientes
         
         //Objetos Necesarios
         
         Cliente cliente1=new Cliente("12345", "Juan Perez Lopez", "Valle de Trigo 22", "4-14-23-33");
         Cliente cliente2=new Cliente("23456", "Luisa Ramos Soto", "Chihuahua 789 Nte.", "4-12-10-15");
         Cliente cliente3=new Cliente("45667", "Jose Beltran Ruiz", "Cardenas 456", "4-18-13-98");
         //Inciso j) Agregar 3 clientes al catalogo
         try{
             persistencia.agregar(cliente1);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso j):" + pe.getMessage());
         }
         try{
             persistencia.agregar(cliente2);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso j):" + pe.getMessage());
         }
         try{
             persistencia.agregar(cliente3);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso j):" + pe.getMessage());
         }
         //Inciso k) Listar el catalogo de clientes
         try{
             System.out.println("-----Inciso k)-----");
            List<Cliente>clientes=persistencia.consultarClientes();
            for (Iterator i=clientes.iterator();i.hasNext();){
                Cliente cliente=(Cliente)i.next();
                System.out.println(cliente.toString());
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso k):" + pe.getMessage());
        }      
        //Inciso L) Eliminar al cliente  “4566"
         
         Cliente cltmp=new Cliente("45667");
         try{
             persistencia.eliminar(cltmp);
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso l):" + pe.getMessage());
         }
         
         //Inciso m) Listar el contenido del catalogo de clientes
         try{
             System.out.println("-----Inciso m)-----");
            List<Cliente>clientes=persistencia.consultarClientes();
            for (Iterator i=clientes.iterator();i.hasNext();){
                Cliente cliente=(Cliente)i.next();
                System.out.println(cliente.toString());
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso m):" + pe.getMessage());
        } 
         
         //Inciso n) Obtén del catálogo de películas la película cuyo número de 
         //catálogo es “P00001” y si está,agrega tres copias al inventario de películas
         
         try{
             Pelicula tmpPel=persistencia.obten(new Pelicula("P00001"));
             if(tmpPel!=null){
                 persistencia.inventariar(tmpPel, 3);
             }
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso n):" + pe.getMessage());
         }
         
         //Inciso o)  Obtén del catálogo de películas la película cuyo número de
         //catálogo es “P00002” y si está,agrega una copia al inventario de película
         try{
             Pelicula tmpPel=persistencia.obten(new Pelicula("P00002"));
             if(tmpPel!=null){
                 persistencia.inventariar(tmpPel, 1);
             }
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso o):" + pe.getMessage());
         }
         
         //Inciso p)  Obtén del catálogo de películas la película cuyo número de
         //catálogo es “P00003” y si está,agrega dos copias al inventario de película
         
         try{
             Pelicula tmpPel=persistencia.obten(new Pelicula("P00003"));
             if(tmpPel!=null){
                 persistencia.inventariar(tmpPel, 2);
             }
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso p):" + pe.getMessage());
         }
         
         //Inciso q) Repite el paso p), pero agregando sólo una copia
         try{
             Pelicula tmpPel=persistencia.obten(new Pelicula("P00003"));
             if(tmpPel!=null){
                 persistencia.inventariar(tmpPel, 1);
             }
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso q):" + pe.getMessage());
         }
         
         //Inciso r)  Lista el contenido del inventario de películas
         
         try{
             System.out.println("-----Inciso r)-----");
            List<ArticuloED>articulosED=persistencia.consultarInventarioPeliculas();
            for (Iterator i=articulosED.iterator();i.hasNext();){
                ArticuloED articuloED=(ArticuloED)i.next();
                System.out.println(articuloED.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso r):" + pe.getMessage());
        }
         
         //Inciso s) Elimina del inventario una copia de la película cuyo número
         //de catálogo es “P00001
         
         try{
             persistencia.desinventariar(new Pelicula("P00001"), 1);
         }
         catch(PersistenciaException pe){
             System.out.println("Error inciso s):" + pe.getMessage());
         }
         
         //Inciso t) Enlista los articulos del inventario
         try{
             System.out.println("-----Inciso t)-----");
            List<ArticuloED>articulosED=persistencia.consultarInventarioPeliculas();
            for (Iterator i=articulosED.iterator();i.hasNext();){
                ArticuloED articuloED=(ArticuloED)i.next();
                //El objeto ArticuloED muestra en el TOString el atributo
                //"Titulo" de la pelicula, pero éste no se guarda en el archivo
                //correspondiente a ArticulosED, por tanto se muestra null.
                System.out.println(articuloED.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso t):" + pe.getMessage());
        }
         
         
//                          Rentas
         //Objetos necesarios
         Fecha fecha=new Fecha();
         fecha.setDia(fecha.getDia()-3);
         Renta renta1=new Renta(new Cliente("12345"),new Pelicula("P00001"), fecha, 3);
         Renta renta2=new Renta(new Cliente("23456"),new Pelicula("P00003"), new Fecha(), 5);
         Renta renta3=new Renta(new Cliente("23456"),new Pelicula("P00001"), new Fecha(), 3);
         
         //Inciso u) Renta 3 titulos a 3 clientes
         
         try{
             persistencia.rentarPelicula(renta1);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso u):" + pe.getMessage());
         }
         try{
             persistencia.rentarPelicula(renta2);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso u):" + pe.getMessage());
         }
         try{
             persistencia.rentarPelicula(renta3);
         }catch(PersistenciaException pe){
             System.out.println("Error inciso u):" + pe.getMessage());
         }
         
         //Inciso v)Renta de nuevo la película cuyo número de catálogo es
         //P00001” al cliente cuyo número de credencial es 12345
         
         try{
             persistencia.rentarPelicula(new Renta(new Cliente ("12345"), new Pelicula("P00001"), fecha, 3));
         }catch(PersistenciaException pe){
             System.out.println("Error inciso v):" + pe.getMessage());
         }
         
         //Inciso w) Lista las rentas de las peliculas
         try{
             System.out.println("-----Inciso w)-----");
            List<Renta>rentas=persistencia.consultarRentasPeliculas();
            for (Iterator i=rentas.iterator();i.hasNext();){
                Renta renta=(Renta)i.next();
                System.out.println(renta.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso w):" + pe.getMessage());
        }
         //Inciso x) Lista las Rentas del cliente 12345
            try{
             System.out.println("-----Inciso x)-----");
            List<Renta>rentas=persistencia.consultarRentasPeliculas(new Cliente("12345"));
            for (Iterator i=rentas.iterator();i.hasNext();){
                Renta renta=(Renta)i.next();
                System.out.println(renta.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso x):" + pe.getMessage());
        }
         
         //Inciso x) Lista las rentas del articulo P00003
            try{
             System.out.println("-----Inciso y)-----");
            List<Renta>rentas=persistencia.consultarRentas(new Pelicula("P00001"));
            for (Iterator i=rentas.iterator();i.hasNext();){
                Renta renta=(Renta)i.next();
                System.out.println(renta.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso y):" + pe.getMessage());
        }
         //Inciso z) Lista las rentas de hoy
            try{
             System.out.println("-----Inciso z)-----");
            List<Renta>rentas=persistencia.consultarRentasPeliculas(new Periodo(new Fecha(),new Fecha()));
            for (Iterator i=rentas.iterator();i.hasNext();){
                Renta renta=(Renta)i.next();
                System.out.println(renta.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso z):" + pe.getMessage());
        }
            
        //Inciso aa) Lista las peliculas rentadas
            try{
             System.out.println("-----Inciso aa)-----");
            List<ArticuloED>peliculas=persistencia.consultarInventarioPeliculasRentadas();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                ArticuloED pelicula=(ArticuloED)i.next();
                System.out.println(pelicula.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso aa):" + pe.getMessage());
        }
            
        //Inciso bb) Lista las peliculas disponibles
            try{
             System.out.println("-----Inciso bb)-----");
            List<ArticuloED>peliculas=persistencia.consultarInventarioPeliculasDisponibles();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                ArticuloED pelicula=(ArticuloED)i.next();
                System.out.println(pelicula.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso bb):" + pe.getMessage());
        }
        //Inciso cc) Devuelve la pelicula cuyo numero de catalogo es P00001
            //y numero de credencial es 12345. Obten la pelicula y cliente
            //De sus respectivos catalogos
           
            
            try{
                Renta renta=new Renta(persistencia.obten(new Cliente("12345")),
                        persistencia.obten(new Pelicula("P00001")));
                persistencia.devolverPelicula(renta);
            }
            catch(PersistenciaException pe){
                System.out.println("Error inciso cc):" + pe.getMessage());
            }
            
            //Inciso dd) Lista las peliculas que estan rentadas
             try{
             System.out.println("-----Inciso dd)-----");
            List<ArticuloED>peliculas=persistencia.consultarInventarioPeliculasRentadas();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                ArticuloED pelicula=(ArticuloED)i.next();
                System.out.println(pelicula.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso dd):" + pe.getMessage());
        }
             //Inciso ee) Lista las peliculas disponibles
             try{
             System.out.println("-----Inciso ee)-----");
            List<ArticuloED>peliculas=persistencia.consultarInventarioPeliculasDisponibles();
            for (Iterator i=peliculas.iterator();i.hasNext();){
                ArticuloED pelicula=(ArticuloED)i.next();
                System.out.println(pelicula.toString()); 
                
            }
        }
        catch(PersistenciaException pe){
            System.out.println("Error inciso ee):" + pe.getMessage());
        }
    }
    
}